Immediately-Invoked Function Expression
private scopeste declareren.
Beschrijving
Je bent de syntax misschien al eens tegengekomen, maar wat doet dat eigenlijk een Immediately-Invoked Function Expression afgekort tot IIFE (uitgesproken als 'iffy')? En welk nut heeft het?
Een functie uitvoeren, onmiddellijk nadat ze gedeclareerd is, is een andere toepassing van anonieme functies.
( function () { alert('hello'); } )();
De syntaxis lijkt op het eerste gezicht raar, maar we plaatsen gewoon een functie-expressie tussen ronde haken, gevolgd door een tweede set van ronde haken. De tweede set zegt: "nu uitvoeren" en is ook de plek om eventuele argumenten te zetten die door anonieme functie geaccepteerd worden:
( function (name) { alert('hello ' + name + '!'); } )('world');
Je kan de sluitingshaak van de eerste reeks van ronde haken ook aan het einde zetten. Beide van deze werken:
(function () { // ... }());
en
( function () { // ... } )();
Je gebruikt onmiddellijke (zelf inroepen) anonieme functies wanneer je wat werk wilt doen zonder extra globale variabelen te moeten maken. Het nadeel is, natuurlijk, is dat je dezelfde functie geen tweemaal kan uitvoeren. Dit maakt onmiddellijk functies beste geschikt voor eenmalige of initialisatie taken.
Toepassing
In Functies die zichzelf wijzigen zagen we een voorbeeld waarbij een functie zichzelf wijzigt. Maar om die functie te kunnen gebruiken moesten we die één keer uitvoeren om de functie zich zelf te laten wijzigen. Pas als we die de eerste keer hadden opgeroepen was die klaar om ook gebruikt te worden. Dat is een voorbeeld waarbij een IIFE handig van pas komt. Op het moment van het declareren voeren we die ook om ze te initialiseren.
var user = 'Jef'; var authorization; (authorization = function() { if (user == 'Jef') { // hier schrijf je nuttiger dingen om te doen // maar dit is een voorbeeld authorization = function() { return 'admin'; }; } else { authorization = function() { return 'bezoeker'; }; } })(); // we moeten we functie niet een eerste keer // oproepen om die initialiseren, we kunnen ze nu // direct gebruiken console.log(user, ' is ', authorization());
Bronnen
Ben Alman, Immediately-Invoked Function Expression (IIFE), 15 november 2010